本文同步刊登於 k2r2bai.com Blog。
在昨天文章中,我針對開發環境(Development)
與測試環境(Testing)
使用情境下,選擇 Kubernetes 工具的看法,而今天將延續 淺談 Kubernetes 的部署工具選擇 Part2 未講完的部分繼續分享預備環境(Staging)
與生產環境(Production)
看法。
在開始談預備環境與生產環境上,我如何選擇部署工具前,先來回顧一下我在公司聽到關於這兩者的幾句經典話:
然後這幾句話換來的結果就是。
回想過去參與某些專案時,經歷的幾個駭人狀況:
諸如此類問題,三不五時就會聽聞與遭遇,這也讓我對於這種情況越來越重視,或許不是每間公司都有資源可以分多個環境階段來預防服務上線前的問題,但適當地切分還是能有效避免一些不該發生問題。不過上面這些只是題外話,總之我們開始進入主題吧。
當我們開發的程式經過測試環境的單元測試、煙霧測試、E2E 測試(或整合測試),並將程式轉為發布階段時,就會利用 CI/CD 平台(工具)部署至預備環境(或者 QA 自行部署),然後由內部 QA 或軟體測試人員進行各種上線時,可能會發生的情境或者模擬客戶使用的狀況。那在這樣的環境下,該如何選擇 Kubernetes 部署工具呢?
有時候我們會疑惑測試環境與預備環境的差異,因為這兩者都被用來做測試的環境。我自己的理解大概是這樣:
- Testing:是
開發人員
驗證程式的各種測試的環境,開發人員可以在程式轉到發行版本前,測試任何程式的變更或錯誤修復。- Staging:比較偏向專給
QA
或軟體測試人員
對開發人員發布的程式使用。在這環境中,會盡可能去模擬與實踐 Production 環境的各種事情,以確保上線的品質。也可以想像預備環境就是生產環境的副本
。
事實上,選擇條件類似先前一些提到的,但是針對某幾點特別再去思考:
那麼從上面這些條件中過濾,有哪些可以選擇呢?我個人大概是使用以下這些:
其實還有很多可以選擇,但這邊比較偏向以自己使用過為主,若有興趣的人可以到 CNCF Landscape 查看經過一致性認證的部署工具。
不過這麼多究竟哪個是最好呢?
事實上,沒有所謂最好最合適的部署工具,因為我通常還是依據情況來選擇,例如:
在裸機部署時,往往需要連同作業系統要一起安裝,但若叢集的節點過多的話,就會增加維運負擔,因此我還會結合 PXE/iPXE 以 Network boot 方式安裝作業系統,因為裸機自建環境不像公有雲提供的服務一樣,點一點就能部署起來。
當預備環境上的服務經過 QA 與軟體測試人員嚴厲的測試後,就會進入部署生產環境的階段,這時在生產環境上的工具該如何選擇呢?
在上一小節有提到預備環境可以看作是生產環境的副本
,因此所有預備環境的條件都要去考量。但要額外注意的是升級叢集
時,要確保使用工具一次執行的節點數是否正確,因為要是一次太多節點升級發生故障,且沒有多餘節點支撐服務運作的話,將會帶來嚴重的損失。
在這部分,我較多情況下是使用 Kubespray 與 Rancher 結合使用。部署 Kubernetes 叢集會以 Kubespray 為基礎來自行調整與修改,而 Rancher 則作為管理介面來管理 Kubespray 部署的 Kubernetes 叢集。
這幾天都是分享自己選擇部署工具的看法與經驗,但老實說沒有哪個一個工具是最好的,終究還是依據公司跟團隊的需求來找出最適合的。不過若公司真的想要搞自建(或地端)部署的話,尤其是要幫客戶提供部署服務,我蠻建議手動去嘗試 Kubernetes The Hard Way 的過程,至少可以讓自己對於部署 Kubernetes 的過程有更近一步的認知,這樣才不會遇到部署有問題時無從下手。
而若團隊在部署方面有很多經驗的話,那基於 Kubernetes The Hard Way 與 kubeadm 來開發一套公司專用的工具也是一個選擇。像是我們也有這樣做,透過分析 kubeadm 與手動部署的流程來了解每個部署過程,並以 Ansible 或 Puppet 方式來實現自動化。只是若開發都是由某一個人貢獻的話,那麼他離開時,就會面臨沒人維護問題。
看到這邊想問有點外行的蠢問題,從文章中感覺是一項專案是使用一個cluster,去管理該專案的各項環境(開發環境、測試環境、預備環境、生產環境)。所以意思如果是不同專案就會架構不同的cluster嗎?